package com.wyl.niupi.framework.vo;

import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 响应Vo，用于响应前端的请求
 *
 * @author 吴宇亮
 * @date 2019-02-07
 */
@Data
public class ResponseVo<Entity> {

    /** 响应代码 **/
    private int code;
    /** 响应内容 **/
    private String msg;
    /** 返回数据 **/
    private Entity data;
    /** 前端弹出框类型 **/
    private LayerType layerType;

    @Schema(description = "状态码", example = "200", required = true)
    public int getCode() {
        return code;
    }
    @Schema(description = "反馈消息", example = "操作成功", required = false)
    public String getMsg() {
        return msg;
    }
    @Schema(required = false)
    public Entity getData() {
        return data;
    }
    @Schema(description = "前端弹出框类型", required = false)
    public LayerType getLayerType() {
        return layerType;
    }

    /**
     * 响应码
     */
    public enum Code {
        /** 成功 **/
        SUCCESS(200),
        /** 没有权限 **/
        NonAuthority(203),
        /** 客户端请求的语法错误，服务器无法理解，例如：参数错误 **/
        FAIL(400),
        /** 后台报错 **/
        ERROR(500);

        private int code;
        private Code(int code){
            this.code = code;
        }

        @JsonValue
        public int getCode(){
            return this.code;
        }
    }

    /**
     * 前端提示框类型
     */
    public enum LayerType {
        /** 前端提示框类型 layer.msg **/
        MSG,
        /** 前端提示框类型 layer.alert **/
        ALERT,
        /** 前端提示框类型 layer.open **/
        OPEN
    }
}
